/*******************************************************************************
  * 文件：BoardCommC7.h
  * 作者：djy
  * 版本：v1.0.0
  * 日期：2019-05-15
  * 说明: 显示板与电源板C7通信协议，C7协议为海尔内部协议
*******************************************************************************/
#ifndef _BOARD_COMM_C7_H
#define _BOARD_COMM_C7_H

// 通用头文件
#include "Typedefine.h"
#include "Constant.h"
#include "Macro.h"  
#include "Timer.h"

#define CONFIG_BOARDCOMM_C7  (1)

#if CONFIG_BOARDCOMM_C7

#define u8BOARD_COMM_C7_FRAME_MAX_LEN         (150)         // 最大长度
#define u8BOARD_COMM_C7_FRAME_STX             (0xFF)        // 报文帧头
#define u8BOARD_COMM_C7_FRAME_SURPLUS         (0x55)        // 冗余字符
#define u8BOARD_COMM_C7_FRAME_DISPLAY_ADDR    (0x000001)    // 显示板/流程板地址
#define u8BOARD_COMM_C7_FRAME_POWER_ADDR      (0x000002)    // 电源板地址 

// 帧类型
#define u16BOARD_COMM_C7_DOWNWARD             (0x0002)      // 下行（显示板->电源板）
#define u16BOARD_COMM_C7_UPWARD               (0x0102)      // 上行（电源板->显示板）

#pragma pack(1)

typedef struct
{
    // Byte0-Byte17
    U8  u8MajorVersion        : 8;   // 主版本
    U8  u8MinorVersion        : 8;   // 次版本
    U8  u8RevisionVersion     : 8;   // 修订版本
    U8  u8HardwareType        : 8;   // 硬件类型
    U8  u8CavitySensor_H      : 8;   // 腔体温度传感器高字节
    U8  u8CavitySensor_L      : 8;   // 腔体温度传感器低字节
    U8  u8Reserve23           : 8;   // 保留
    U8  u8Reserve24           : 8;   // 保留
    U8  u8SteamGeneratorSensor_H : 8;// 蒸汽发生器传感器高字节
    U8  u8SteamGeneratorSensor_L : 8;// 蒸汽发生器传感器低字节
    U8  u8BottomSensor_H      : 8;   // 底部温度传感器高字节
    U8  u8BottomSensor_L      : 8;   // 底部温度传感器低字节
    U8  u8Reserve25           : 8;   // 保留
    U8  u8Reserve26           : 8;   // 保留
    U8  u8Reserve27           : 8;   // 保留
    U8  u8Reserve28           : 8;   // 保留
    U8  u8Reserve29           : 8;   // 保留
    U8  u8Reserve30           : 8;   // 保留

    // Byte18
    U8  bUpOutHeatTubeStatus  : 1;   // 上外加热管状态
    U8  bUpInHeatTubeStatus   : 1;   // 下内加热管状态
    U8  bDownHeatTubeStatus   : 1;   // 下加热管状态
    U8  bBackHeatTubeStatus   : 1;   // 后加热管状态
    U8  bSteamPanStatus       : 1;   // 蒸发盘状态
    U8  bOutsideSteamPanStatus: 1;   // 蒸发盘外管状态
    U8  bInsideSteamPanStatus : 1;   // 蒸发盘内管状态
    U8  bConvectFanStatus     : 1;   // 对流风机状态
    
    // Byte19
    U8  bCoolFan1Status       : 1;   // 冷却风机1状态（散热风机）
    U8  bCoolFan2Status       : 1;   // 冷却风机2状态
    U8  bDoorLockStatus       : 1;   // 门锁电机状态
    U8  bForkMotorStatus      : 1;   // 烧叉电机状态
    U8  bWaxMotorStatus       : 1;   // 蜡马达状态
    U8  bLampStatus           : 1;   // 炉灯状态
    U8  bLiftingMotorStatus   : 2;   // 升降电机状态（00=忽略， 01=面板升起， 10=面板降下）

    // Byte20
    U8  bZeroLine1Status      : 1;   // 零线总控1状态
    U8  bZeroLine2Status      : 1;   // 零线总控2状态
    U8  bIntakePumpStatus     : 1;   // 进水泵控制状态
    U8  bDrainPumpStatus      : 1;   // 排水泵控制状态
    U8  bZeroLine3Status      : 1;   // 零线总控3状态
    U8  bReserve1             : 3;   // 保留1

    // Byte21
    U8  u8Reserve2            : 8;   // 保留2，本设备没有此功能

    // Byte22
    U8  u8Reserve3            : 8;   // 保留3

    // Byte23
    U8  u8Reserve4            : 8;   // 保留4

    // Byte24
    U8  bDoorStatus           : 1;   // 门开关状态
    U8  u7Reserve5            : 7;   // 保留5

    // Byte25
    U8  u1Reserve6            : 1;   // 保留6
    U8  bWaterBoxStatus       : 1;   // 清水盒位置状态
    U8  bWaterBoxEmptyStatus  : 1;   // 清水盒空状态
    U8  bSteamPanWaterStatus  : 1;   // 蒸发盘水位状态（高水位）
    U8  u4Reserve7            : 4;   // 保留7

    // Byte26
    U8  u8Reserve8            : 8;   // 保留8,温度传感器故障状态

    // Byte27
    U8  u8Reserve9            : 8;   // 保留9

    // Byte28
    U8  u8Reserve10           : 8;   // 保留10，告警

    // Byte29
    U8  u8Reserve11           : 8;   // 保留11

    // Byte30
    U8  u8Reserve12           : 8;   // 保留12

    // Byte31
    U8  u8Reserve13           : 8;   // 保留13

    // Byte32
    U8  u8Reserve14           : 8;   // 保留14

    // Byte33
    U8  u8Reserve15           : 8;   // 保留15

    // Byte34
    U8  u8Reserve16           : 8;   // 保留16

    // Byte35
    U8  u8Reserve17           : 8;   // 保留17

    // Byte36
    U8  u8Reserve18           : 8;   // 保留18

    // Byte37
    U8  u8Reserve19           : 8;   // 保留19

    // Byte38
    U8  u8Reserve20           : 8;   // 保留20

    // Byte39
    U8  u8Reserve21           : 8;   // 保留21

    // Byte40
    U8  u8Reserve22           : 8;   // 保留22
}BoardRecvData_ts;

typedef struct
{
    // Byte0
    U8  bUpOutHeatTubeCtrl   : 1;   // 上外加热管控制
    U8  bUpInHeatTubeCtrl    : 1;   // 上内加热管控制
    U8  bDownHeatTubeCtrl    : 1;   // 下加热管控制
    U8  bBackHeatTubeCtrl    : 1;   // 后加热管控制
    U8  bSteamPanCtrl        : 1;   // 蒸发盘控制
    U8  bOutsideSteamPanCtrl : 1;   // 蒸发盘外管控制
    U8  bInsideSteamPanCtrl  : 1;   // 蒸发盘内管控制
    U8  bConvectFanCtrl      : 1;   // 对流风机控制

    //  Byte1
    U8  bCoolFan1Ctrl        : 1;   // 冷却风机1控制（散热风机）
    U8  bCoolFan2Ctrl        : 1;   // 冷却风机2控制
    U8  bDoorLockMotor       : 1;   // 门锁电机控制
    U8  bForkMotorCtrl       : 1;   // 烧叉电机控制
    U8  bWaxMotorCtrl        : 1;   // 蜡马达控制
    U8  bLampCtrl            : 1;   // 炉灯控制
    U8  bLiftingMotorCtrl    : 2;   // 升降电机控制（00=忽略， 01=面板升起， 10=面板降下）

    // Byte2
    U8  bZeroLine1Ctrl       : 1;   // 零线总控1
    U8  bZeroLine2Ctrl       : 1;   // 零线总控2
    U8  bIntakePumpCtrl      : 1;   // 进水泵控制
    U8  bDischargePumpCtrl   : 1;   // 排水泵控制
    U8  bZeroLine3Ctrl       : 1;   // 零线总控3
    U8  bClkValid            : 1;   // 时钟有效位
    U8  bReserve1            : 2;   // 保留1

    // Byte3
    U8  bVideoBoardPowerCtrl : 1;   // 视频板电源控制
    U8  bCameraCoolingFanCtrl: 1;   // 摄像头散热风扇控制
    U8  bOpenDoorMotorCtrl   : 2;   // 开门电机控制（00=忽略， 01=门关闭命令， 10=门打开命令）
    U8  bSolenoidValveCtrl   : 1;   // 电磁阀控制
    U8  bOxygenSensorCtrl    : 1;   // 氧传感器控制
    U8  bReserve2            : 2;   // 保留2

    // Byte4
    U8 u8Reserve3            : 8;   // 保留3

    // Byte5
    U8 u8Reserve4            : 8;   // 保留4

    // Byte6
    U8 u8ClkHour             : 8;   // 小时

    // Byte7
    U8 u8ClkMinute           : 8;   // 分钟

    // Byte8
    U8 u8ClkSecond           : 8;   // 秒

    // Byte9
    U8 u8Reserve8            : 8;   // 保留
    
    // Byte10
    U8 u8Reserve5            : 8;   // 保留

    // Byte11
    U8 u8Reserve6            : 8;   // 保留

    // Byte12
    U8 u8Reserve7            : 8;   // 保留
}BoardSendData_ts;

typedef struct
{
    U8 u8STX1;              // 帧头1
    U8 u8STX2;              // 帧头2
    U8 u8Len;               // 帧长
    U8 au8DestAddr[3];      // 目的地址
    U8 au8SourceAddr[3];    // 源地址
    U8 u8Cmd_H;             // 帧类型高字节
    U8 u8Cmd_L;             // 帧类型低字节
    U8 au8Data[14];          // 数据
}BoardFrame_ts;
#pragma pack()

typedef struct
{
    Timer_ts  sTimer;
}BoardCommCtrl_ts;

void BoardCommC7_Init(void);

#endif

#endif

